﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using IgrMensageiros.Util;
using BLL;
using MODELO;
using log4net;

namespace IgrMensageiros.UI
{
    public partial class UI_Permissoes : Form
    {
        #region "Declarações"

        public enum TiposPermissoes
        {
            Administrador = 0,
            Usuario = 1
        }
        private enum TipoMensagem { _PreencherCampos = 1 }
        Usuario usuario = new Usuario();
        
        private static log4net.ILog log;

        #endregion

        public UI_Permissoes()
        {
            InitializeComponent();

            log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            log4net.Config.XmlConfigurator.Configure();

            PreencherPermissoes();
            InicializarPanel();
        }

        #region "Eventos"

        private void btnFechar_Click(object sender, EventArgs e)
        {
            try
            {
                Close(); 
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void btnSalvarFechar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Validar())
                {
                    if (usuario != null)
                    {
                        Salvar(usuario);
                        Close();
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Validar())
                {
                    if (usuario != null)
                    {
                        Salvar(usuario);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            try
            {
                Utils.LimparCampos(txtNome);
                Utils.LimparCampos(txtLogin);
                Utils.LimparCampos(txtSenha);
                Utils.LimparCampos(txtEmail);
                Utils.LimparCampos(txtConfirmaSenha);
                InicializarPanel();
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void txtConfirmaSenha_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (txtSenha.Text != txtConfirmaSenha.Text)
                {
                    panel.Visible = true;
                    lblMensagem.Visible = true;
                    lblMensagem.Text = Utils.Const_Senha_Diferente;
                }
                else
                {
                    panel.Visible = false;
                    lblMensagem.Visible = false;
                    lblMensagem.Text = "";
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        #endregion

        #region "Metodos"

        private Boolean Validar()
        {
            try
            {
                bool count;
                bool retorno = false;
                count = Utils.CamposObrigatorios(txtNome);
                count = Utils.CamposObrigatorios(txtLogin);
                count = Utils.CamposObrigatorios(txtSenha);
                count = Utils.CamposObrigatorios(txtConfirmaSenha);
                count = Utils.CamposObrigatorios(txtEmail);
                count = Utils.CamposObrigatorios(cmbPerfil);
                
                if (count.GetHashCode() > 0)
                {
                    usuario.Email = txtEmail.Text;
                    usuario.Login = txtLogin.Text;
                    usuario.Nome = txtNome.Text;
                    usuario.Perfil = cmbPerfil.SelectedItem.ToString() == "Administrador" ? Convert.ToChar("A") : Convert.ToChar("U");
                    usuario.Senha = txtSenha.Text;

                    retorno = true;
                }
                else
                {
                    Mensagem (Utils.Const_PreencherCampos);
                }

                return retorno;
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void PreencherPermissoes()
        {
            cmbPerfil.Items.Add(TiposPermissoes.Administrador);
            cmbPerfil.Items.Add(TiposPermissoes.Usuario);
        }

        private void Salvar(Usuario pUsuario)
        {
            PermissaoBLL permissaoBLL = new PermissaoBLL();
            try
            {
                if (permissaoBLL.Gravar(usuario))
                {
                    Mensagem(Utils.Const_RegistroSalvo);
                }
                else
                {
                    Mensagem(Utils.Const_RegistroJaCadastrado);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void InicializarPanel()
        {
            panel.Visible = false;
            lblMensagem.Text = "";
        }

        private String Mensagem(String pMensagem)
        {
            panel.Visible = true;
            lblMensagem.Visible = true;
            return lblMensagem.Text = pMensagem;
        }
        #endregion

     


    }
}
